package JUC.第01章_前置知识;

/**
 * 程序进程线程
 * ●程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。
 *      即指一段静态的代码，静态对象。
 * ●进程(process)是程序的一次执行过程，或是正在运行的一个程序。
 *      是一个动态的过程:有它自身的产生、存在和消亡的过程。生命周期
 *      ➢如:运行中的QQ，运行中的MP3播放器
 *      ➢程序是静态的，进程是动态的
 *      ➢进程作为资源分配的单位，系统在运行时会为每个进程分配不同的内存区域
 * ●线程(thread),进程可进一步细化为线程，是一个程序内部的一条执行路径。
 *      ➢若一个进程同一时间并行执行多个线程，就是支持多线程的
 *      ➢线程作为调度和执行的单位，每个线程拥有独立的运行栈和程序计数器(pc)，线程切换的开销小
 *      ➢一个进程中的多个线程共享相同的内存单元/内存地址空间>它们从同一堆中分配对象，可以
 *         访问相同的变量和对象。这就使得线程间通信更简便、高效。但多个线程操作共享的系统资
 *         源可能就会带来安全的隐患。
 * ●管程
 *       Monitor(监视器)， 也就是我们平时所说的锁
 *       Java虛拟机可以支持方法级的同步和方法内部一段指令序列的同步，
 *           这两种同步结构都是使用管程(Monitor， 更常见的是直接将它称为“锁”)来实现的。
 *      方法级的同步是隐式的，无须通过字节码指令来控制，它实现在方法调用和返回操作之中。
 *      虚拟机可以从方法常量池中的方法表结构中的 ACC_SYNCHRONIZED 访问标志得知一个方法是否被声明为同步方法。
 *      当方法调用时，调用指令将会检查方法的 ACC_SYNCHRONIZED 访问标志是否被设置，
 *      如果设置了，执行线程就要求先成功持有管程，然后才能执行方法，
 *      最后当方法完成(无论是正常完成还是非正常完成)时释放管程。
 *      在方法执行期间，执行线程持有了管程，其他任何线程都无法再获取到同一个管程。
 *      如果一个同步方法执行期间抛出了异常，并且在方法内部无法处理此异常，
 *      那这个同步方法所持有的管程将在异常抛到同步方法边界之外时自动释放。
 *      同步一段指令集序列通常是由Java语言中的synchronized语句块来表示的，
 *      Java虛拟机的指令集中有 monitorenter 和 monitorexit 两条指令来支持
 *      synchronized 关键字的语义，正确实现 synchronized 关键字
 *      需要Javac编译器与Java虚拟机两者共同协作支持，
 *
 */
public class C_程序进程线程管程 {
    public static void main(String[] args) {
        synchronized (C_程序进程线程管程.class){

        }
    }
}
